package com.reflex.method;

import com.reflex.dao.Car;

/**
 * @Author: lizehui
 * @Description: 获取Class类的方式
 * @Date: 2022/11/18/16:57
 */
public class ClassCreate {
    public static void main(String[] args) throws Exception{
        //1、Class.forName 从配置文件获取Class
        String classPath = "com.reflex.dao.Car";
        Class<?> cls = Class.forName(classPath);

        //2、类名.class 多用于参数传递,比如构造器
        Class cls1 = Car.class;

        //3、 对象.getClass() 已经知道实例了，获取Class
        Car car = new Car();
        Class cls2 = car.getClass();

        //4、通过类加载器，来获取类的Class对象
        //(1)获取类加载器
        ClassLoader classLoader = car.getClass().getClassLoader();
        //(2)通过类加载器得到Class对象
        Class cls3 = classLoader.loadClass(classPath);

        //cls、cls1、cls2、cls3其实是同一个对象
        System.out.println(cls.hashCode());
        System.out.println(cls1.hashCode());
        System.out.println(cls2.hashCode());
        System.out.println(cls3.hashCode());

        //5、基本类型
        Class<Integer> integerClass = int.class;

        //6、基本类型对应的包装类可以通过 .TYPE 得到Class类对象
        Class<Integer> type1 = Integer.TYPE;

    }
}
